const path = require('path')

const { 
    fileUploadError, 
    unSupportedFileType, 
    publishGoodsError,
    invalidGoodsID 
} = require('../constants/err.type')

const { 
    createGoods,
    updateGoods, 
    removeGoods, 
    restoreGoods,
    findGoods,
 } = require('../service/goods.service')

class GoodsController {
    async upload(ctx, next){
        // console.log(ctx.request.files.file) //file这个属性要与上传图片请求当中的key相同
        const {file} = ctx.request.files
        console.log(file)
        const fileType = ['image/jpeg','image/png']
        if(file){
            if(!fileType.includes(file.type)){
                console.error('上传文件格式不支持')
                return ctx.app.emit('error',unSupportedFileType)
            }
            ctx.body = {
                code: 0,
                message: '商品图片上传成功',
                result: {
                    goods_img: path.basename(file.filepath)
                },
            }
        }else{
            return ctx.app.emit('error',fileUploadError,ctx)
        }
    }

    async create(ctx, next){
        // 直接调用service的createGoods方法
        try{
            const { createdAt, updatedAt, ...res} = await createGoods(ctx.request.body)
            ctx.body = {
                code: 0,
                message: '发布商品成功',
                result: res,
            }
        }catch(err){
            console.error(err)
            return ctx.app.emit('error', publishGoodsError, ctx)
        }
    }

    async update(ctx, next){
        try{
            const res = await updateGoods(ctx.params.id, ctx.request.body)
            if(res){
                ctx.body = {
                    code: 0,
                    message: '修改商品成功',
                    result: ''
                }
            }else{
                return ctx.app.emit('error', invalidGoodsID, ctx)
            }
        }catch(err){
            console.error(err)
        }
    }

    async remove(ctx,next){
        const res = await removeGoods(ctx.params.id)

        if(res){
            ctx.body = {
                code: 0,
                message: '下架商品成功',
                result: ''
            }
        }else{
            return ctx.app.emit('error', invalidGoodsID, ctx)
        }
        
    }

    async restore(ctx,next){
        const res = await restoreGoods(ctx.params.id)
        
        if(res){
            ctx.body = {
                code: 0,
                message: '商品上架成功',
                result: ''
            }
        }else{
            return ctx.app.emit('error', invalidGoodsID, ctx)
        }
    }

    async findAll(ctx,next){
        // 解析pageName,pageSize(获取请求传过来的pageName,pageSize)
        let {pageNum=1, pageSize=10} = ctx.request.query
        // 获取数据库中对应的数据
        let res = await findGoods(pageNum, pageSize)
        // 响应返回结果
        ctx.body = {
            code: 0,
            message: '获取数据成功',
            result: res
        }
    }
}

module.exports = new GoodsController()